const { SyncHook } = require('tapable')
// 参数是一个数组，参数长度有用，代表取真实的call的参数个数，数组里字符串的名字没用
const hook = new SyncHook(['name', 'age'])

let interceptor1 = {
  register: (tapInfo) => {
    console.log('拦截器1开始register', tapInfo);
    // tapInfo.age = 12;
    return tapInfo;
  },
  call: (name, age) => {
    console.log('拦截器1开始 ==call')
  },
  tap: (tapInfo) => {
    console.log('拦截器1开始===tap')
  }
}
let interceptor2 = {
  register: (tapInfo) => {
    console.log('拦截器2开始register', tapInfo);
    // tapInfo.age = 12;
    return tapInfo;
  },
  call: (name, age) => {
    console.log('拦截器2开始 ==call')
  },
  tap: (tapInfo) => {
    console.log('拦截器2开始=tap')
  }
}
hook.intercept(interceptor1);
hook.intercept(interceptor2);

hook.tap({ name: '1' }, (name, age) => {
  console.log(1, name, age)
})
hook.tap('2', (name, age) => {
  console.log(2, name, age)
})
hook.tap('3', (name, age) => {
  console.log(3, name, age)
})
hook.call('zh', 28)

/*
1.回调函数，输出的第一个参数不是error对象，而是传入的第一个参数
2.输出结果
1 zh 28 undefined
2 zh 28 undefined
3 zh 28 undefined
3.使用tap注册事件，事件名称不能是数字
*/